<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <pre>
        js面向对象：使用js代码描述现实事物的特征。
        使用类和对象来描述事物特征。
        类：分类，对具有相同特征的一类事物的统称。
        对象：具体的实例
        类个对象的关系：类是对象的抽象，对象是类的实例
        特征：
            静态特征(属性)：不随环境改变而改变的特征
                作用：存储数据
            动态特征(函数/方法)：可能随环境改变而改变的特征
                作用：实现业务功能
        方便理解：
            参与运算的数据当做属性，逻辑功能当做函数方法

        创建类和对象：
        方式一：基于Object的方式创建对象
            语法：
                var 对象名 = new Object();
                    对象名代表具体实例。
            属性语法：
                对象名.属性名 = 值;
            方法语法：
                对象名.方法名 = function(){}
        
        方式二：使用字面量方式创建对象[采用JSON格式]
            语法： 
                var 对象名称 = {
                    属性名:属性值,
                    方法名:function(){}
                }

        方式三：使用构造函数方式创建类和对象
            语法：  
                //定义构造函数(可理解为定义"类")
                function 构造函数名(参数列表){
                    this.属性名 = 参数值;
                    this.方法名 = function(){}
                }
                //将类实例化成对象
                var 对象名 = new 构造函数名();

            构造函数：
                本质还是函数，作用偏向于为创建对象提供方式
                构造函数可以有参数，但是没有返回结果
                强烈建议构造函数名首字母大写。

        方式四：使用原型prototype方式创建类和对象
              基于构造函数方式创建原型对象。

              //定义构造函数(可理解为定义"类")
              function 构造函数名(){

              } 
              //定义属性
              构造函数名.prototype.属性名 = 值;
              //定义方法
              构造函数名.prototype.方法名 = function(){};

              //将类实例化成对象
              var 对象名 = new 构造函数名();

              原型对象存储数据和实例对象存储数据的区别：
                  实例对象是通过new创建的，存储在一个内存空间中
                      通过构造函数内定义属性实现
                  原型对象是通过prototype引出的指定空间存储数据
                      通过赋值prototype来存储数据
        
        方式五：用混合方式构造对象
                构造函数+prototype的方式。
                构造函数内存属性，prototype存方法   

        使用类和对象：
            创建构造函数[类]
            实力化对象
            对象名.属性值
            对象名.方法名()
        
        在面向对象中：
            属性数据可以有两个存储空间：在原型对象里和在实例对象里
            方法存储在内存指定位置[建议存储在原型对象内]。

        设计模式：
        1）工厂模式：封装创建对象的一种方式[不再需要每次都手动调用new]
              通过编写函数，将创建对象的细节代码隐藏至函数内不暴露，再通过返回对象值来交给函数外使用。
        2）单例模式：在程序运行过程中，该对象就只有一个。
              通过编写函数，判断全局变量的对象是否存在，不存在就创建，存在就直接返回

        this关键字：表示当前对象。写在哪个构造函数里就表示哪个对象。
              this可以调用对象里的属性和方法

    </pre>
    <script type="text/javascript" src="js/chapter8.js" ></script>
</body>
</html>